#ifndef CAMERA_H
#define CAMERA_H

#include "Framework/Prerequisites.h"
#include "Geometry/Frustum.h"
#include "Math/Quaternion.h"
#include "Math/Vector3.h"



namespace tyro
{
	

	namespace Camera
	{
		class Camera
		{
		public:

			Camera(Scene::ISceneManager* sm);

			void RenderScene(Graphics::IViewport* vp);


			virtual void SetAspectRatio(tyro::FLOAT_32 aspectRatio);
			virtual void SetPolygonMode(const PolygonMode& polymode);
			virtual void SetRotation(const Math::Quaternionf& rot);
			virtual void SetTranslation(const Math::Vector3f& vec);
			virtual void SetNearClipDistance(tyro::FLOAT_32 nearDist);
			virtual const PolygonMode GetPolygonMode(void) const;
			virtual const Math::Matrix4f& GetProjectionMatrixRS(void) const; 
			virtual const Math::Matrix4f& GetViewMatrix(void) const; 
			virtual const Math::Quaternionf& GetRotation() const;
			Scene::ISceneManager* GetSceneManager(void) const; 
			virtual const Math::Vector3f& GetTranslation() const;

			void Rotate(const Math::Vector3f& axis, const Math::Radianf& angle);
			void Rotate(const Math::Quaternionf& rotation);

			

		protected:
			
			Geometry::Frustum		frustum;
			Math::Quaternionf		rotation;
			Math::Vector3f			translation;
			PolygonMode				polygonMode;
			Scene::ISceneManager*	sceneManager;
			
		};

		


	}
}

#endif